/*
  Module        : {{ DUT.Module }}
  UMV Component : sequencer
  Author        : 
*/

`ifndef {{ DUT.Module | upper }}_SEQUENCER_SV
`define {{ DUT.Module | upper }}_SEQUENCER_SV

// --- UVM --- //
`include "uvm_macros.svh"
import uvm_pkg::*;

// --- Packages --- //
{% if DUT.Dependencies.Packages -%}
    {% for file, package in DUT.Dependencies.Packages.items() -%}
`include "{{ file }}"
import {{ package }}::*;
    {% endfor -%}
{% endif %}
// --- Includes --- //
`include "sequence_item.sv"
{% if DUT.Dependencies.Includes -%}
    {% for include in DUT.Dependencies.Includes -%}
`include "{{ include }}"
    {% endfor -%}
{% endif -%}
{# Blank Line #}
class {{ DUT.Module }}_sequencer extends uvm_sequencer #({{ DUT.Module }}_sequence_item);
  `uvm_component_utils({{ DUT.Module }}_sequencer)
  
  // --- Constructor --- //
  function new(string name = "{{ DUT.Module }}_sequencer", uvm_component parent);
    super.new(name, parent);
    `uvm_info("SEQUENCER_CLASS", "Inside Constructor", UVM_HIGH)
  endfunction : new
  
  // --- Build Phase --- //
  function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    `uvm_info("SEQUENCER_CLASS", "Build Phase", UVM_HIGH)
  endfunction : build_phase
  
  // --- Connect Phase --- //
  function void connect_phase(uvm_phase phase);
    super.connect_phase(phase);
    `uvm_info("SEQUENCER_CLASS", "Connect Phase", UVM_HIGH)
  endfunction : connect_phase
  
endclass : {{ DUT.Module }}_sequencer

`endif
